name: build smoke tests with prod

on:
  release:
    types: [published]

jobs:
  via-prod:
    runs-on: ${{ matrix.platform }}
    timeout-minutes: 40

    strategy:
      fail-fast: false
      matrix:
        platform: [ubuntu-latest, macos-latest, windows-latest]
        example: [react/gatsby-themed-site, react/create-react-app, react/next.js, vanillajs/monolith, vue/quasar-app, svelte/svelte-app]
        include:
          - platform: ubuntu-latest
            CARGO_HOME: ~/.cargo
          - platform: macos-latest
            CARGO_HOME: ~/.cargo
          - platform: windows-latest
            CARGO_HOME: ~/.cargo

    steps:
      - uses: actions/checkout@v2
      - name: install rust stable
        uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          profile: minimal
      - name: install webkit2gtk (ubuntu only)
        if: matrix.platform == 'ubuntu-latest'
        run: |
          sudo apt-get update
          sudo apt-get install -y webkit2gtk-4.0
      - name: cache rust bin
        id: cache_rust_bin
        uses: actions/cache@v1
        with:
          path: ${{ format('{0}/bin/', matrix.CARGO_HOME) }}
          key: ${{ runner.OS }}-build-bin-${{ hashFiles('**/Cargo.toml') }}-
      - name: cache rust registry/index
        id: cache_rust_reg_index
        uses: actions/cache@v1
        with:
          path: ${{ format('{0}/registry/index/', matrix.CARGO_HOME) }}
          key: ${{ runner.OS }}-build-reg-index-${{ hashFiles('**/Cargo.toml') }}-
      - name: cache rust registry/cache
        id: cache_rust_reg_cache
        uses: actions/cache@v1
        with:
          path: ${{ format('{0}/registry/cache/', matrix.CARGO_HOME) }}
          key: ${{ runner.OS }}-build-reg-cache-${{ hashFiles('**/Cargo.toml') }}-
      - run: cargo install tauri-bundler --force
        # if we pull from cache, this will be skipped, but force just in case cache has an issue but it does exist
        if: steps.cache_rust_bin.outputs.cache-hit != 'true' || steps.cache_rust_reg_index.outputs.cache-hit != 'true' || steps.cache_rust_reg_cache.outputs.cache-hit != 'true'
      - name: cache node modules
        uses: actions/cache@v1
        with:
          path: ${{ format('examples/node/{0}/node_modules', matrix.example) }}
          key: ${{ runner.OS }}-build-${{ hashFiles(format('examples/{0}/yarn.lock', matrix.example)) }}
          restore-keys: ${{ runner.OS }}-build-${{ env.cache-name }}-
      - name: install via yarn
        run: |
          cd ./node/examples/${{ matrix.example }}
          yarn
      - name: build example
        run: |
          cd ./node/examples/${{ matrix.example }}
          yarn build
      - name: yarn tauri build
        run: |
          cd ./node/examples/${{ matrix.example }}
          yarn tauri:prod:build
